/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package mrp.web;

import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;
import javax.faces.component.html.HtmlSelectOneMenu;
import mrp.beans.TallaBean;
import mrp.entity.Talla;
import org.primefaces.component.dialog.Dialog;
import org.primefaces.component.inputtext.InputText;
import org.primefaces.context.RequestContext;

/**
 *
 * @author root
 */
@ManagedBean(name="tallaWeb")
@SessionScoped
public class TallaWeb {
    @ManagedProperty("#{talla}")
    private TallaBean talla;
    
    //_______________________________________________________________________________________________ 
    //----------------------------Componentes de ingreso--------------------------------
        private InputText textCodTalla;
        private HtmlSelectOneMenu comboSeleccionarTallaAltoTalla;
    //----------------------------Componentes de consulta--------------------------------
    //Atributos para cargar la tabla
        private List <Talla> tablaDatosTalla;
        private List <String> datosTallaSeleccionado;
        private Talla TallaSeleccionado; 
    
    //----------------------------Componentes de eliminacion--------------------------------
        private Talla tallaEliminar;
    //_______________________________________________________________________________________________  
    //********************metodos Getters and Setters***************************
        
        public TallaBean getTalla() {
            return talla;
        }

        public void setTalla(TallaBean talla) {
            this.talla = talla;
        }
    //----------------- Getters and Setters ingresar Talla---------------------------
        public InputText getTextCodTalla() {
            return textCodTalla;
        }

        public void setTextCodTalla(InputText textCodTalla) {
            this.textCodTalla = textCodTalla;
        }

        public HtmlSelectOneMenu getComboSeleccionarTallaAltoTalla() {
            return comboSeleccionarTallaAltoTalla;
        }

        public void setComboSeleccionarTallaAltoTalla(HtmlSelectOneMenu comboSeleccionarTallaAltoTalla) {
            this.comboSeleccionarTallaAltoTalla = comboSeleccionarTallaAltoTalla;
        }
                
    //-----------------Fin Getters and Setters ingresar Talla---------------------------

    //-----------------Getters and Setters consultar Talla--------------------------- 
        public Talla getTallaSeleccionado() {
            return TallaSeleccionado;
        }

        public void setTallaSeleccionado(Talla TallaSeleccionado) {
            this.TallaSeleccionado = TallaSeleccionado;
        }
        public List<String> getDatosTallaSeleccionado() {
            return datosTallaSeleccionado;
        }

        public void setDatosTallaSeleccionado(List<String> datosTallaSeleccionado) {
            this.datosTallaSeleccionado = datosTallaSeleccionado;
        }

        public List<Talla> getTablaDatosTalla() {
            return tablaDatosTalla;
        }

        public void setTablaDatosTalla(List<Talla> tablaDatosTalla) {
            this.tablaDatosTalla = tablaDatosTalla;
        }
    //-----------------Getters and Setters consultar Talla--------------------------- 
    
    //-----------------Getters and Setters eliminar Talla---------------------------  
        public Talla getTallaEliminar() {
            return tallaEliminar;
        }

        public void setTallaEliminar(Talla tallaEliminar) {
            this.tallaEliminar = tallaEliminar;
        }          
  //_______________________________________________________________________________________________    
   //*********************Metodos generales************************  
   public void setImputText(String form, String [] componente)// setea los imputText de vistas de ingresar
   {
       javax.faces.context.FacesContext facesContext = javax.faces.context.FacesContext.getCurrentInstance();
      
       javax.faces.component.UIViewRoot root = facesContext.getViewRoot();

       this.setTextCodTalla((InputText)root.findComponent(form).findComponent(componente[0])); 
       this.setComboSeleccionarTallaAltoTalla((HtmlSelectOneMenu)root.findComponent(form).findComponent(componente[1]));
    }
    public void resetComponentes()
    {        
        try{                  
            this.getTextCodTalla().setValue("");                
        }
        catch(java.lang.NullPointerException npe)
        {
            System.out.println("-------------Excepcion en resetComponentes() "+npe);
        }
        System.out.println("-------------borrar datos");
    }  
    private List<String> getEstilosTodosComponentes(String metodo)
    {
        List<String>listaComponentesEstilos=new ArrayList<String>();
        if(metodo.equals("ingresarTalla"))
        {
            listaComponentesEstilos.add(" width: 150px; font-size: 12px;left: 124px; top: 20px; position: absolute  ");            
            listaComponentesEstilos.add(" width: 150px;left: 125px; top: 50px; position: absolute ; font-size: 12px  ");            
        }
      
        return listaComponentesEstilos;
    }
    private void setEstilosTodosComponentes(List<String>listaComponentesEstilos, String metodo)
    {
        if(metodo.equals("ingresarTalla"))
        {
            this.getTextCodTalla().setStyle(listaComponentesEstilos.get(0).toString());
            this.getComboSeleccionarTallaAltoTalla().setStyle(listaComponentesEstilos.get(1).toString());
        }                       
    }
    public boolean esCamposVacios(List<Object>listaComponentes, String metodo)
    {
        boolean vacio=false;
        
        if(metodo.equals("ingresarTalla"))
        {
            List<String>listaComponentesEstilos=this.getEstilosTodosComponentes(metodo);
            for(int i=0;i<listaComponentes.size();i++) 
            {
                boolean isEmpty=true;
                try{
                    if(i==0)
                    {
                        isEmpty=((InputText)listaComponentes.get(i)).getValue().toString().isEmpty(); 
                    
                        String str=((InputText)listaComponentes.get(i)).getValue().toString().trim();
                        if(!((!(str.matches("[0-9]* [0-9][/][0-9]")))==false||(!(str.matches("[0-9]*")))==false))
                        {
                            isEmpty=true;
                            this.getTalla().mostrarMensaje("error", "Error: Formato de numero invalido", "");
                        }
                    }                    
                }
                catch(java.lang.NullPointerException npe){
                    isEmpty=true;
                }
                try{
                    if(i==1)
                    {
                        isEmpty=false;
                        int num=Integer.parseInt(((HtmlSelectOneMenu)listaComponentes.get(i)).getValue().toString());
                        System.out.println("dentro del if htmlselectonemenu");
                        isEmpty=true;                                                                   
                    }                    
                }
                catch(java.lang.Exception npe){
                    System.out.println("excepcion dentro del if htmlselectonemenu");
                }
                if(isEmpty)
                {
                    if(i==0)
                        ((InputText)listaComponentes.get(i)).setStyle(listaComponentesEstilos.get(i)+";border-color: crimson");
                    else
                        ((HtmlSelectOneMenu)listaComponentes.get(i)).setStyle(listaComponentesEstilos.get(i)+";border-color: crimson;background-color: crimson ");
                        
                    vacio=true;
                   
                    javax.faces.context.FacesContext facesContext = javax.faces.context.FacesContext.getCurrentInstance();
      
                    javax.faces.component.UIViewRoot root = facesContext.getViewRoot();
                    
                    if(metodo.equals("ingresarTalla"))
                    {
                        this.mostrarDialogo("formDialogoIngresarTalla", "DialogoIngresarTalla", true);                        
                    }                    
                }
            }
        }        
        return vacio;
    }
   public void mostrarDialogo(String form, String componente, boolean visible)
   {
       javax.faces.context.FacesContext facesContext = javax.faces.context.FacesContext.getCurrentInstance();
       javax.faces.component.UIViewRoot root = facesContext.getViewRoot();
       Dialog dialogo=(Dialog)root.findComponent(form).findComponent(componente);
       dialogo.setVisible(visible);
   }
//   public void mostrarMensajeJS(String mensaje, String form, String componente, boolean componenteVisible ) 
//   {
//        RequestContext context = RequestContext.getCurrentInstance();
//     
//        //execute javascript oncomplete
//        context.execute("window.alert ('"+mensaje+"');");    
//        System.out.println("ya opaso por aca--------------!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
//        if(componenteVisible==true)
//        {
//            this.mostrarDialogo(form, componente, componenteVisible);            
//        }        
//    }
  //_______________________________________________________________________________________________               
   //*********************Metodos ingresar Talla***********************
   public void clicBotonResetearIngresarTalla()
   {
       String form="formDialogoIngresarTalla";
       String[] componentes={"textCodTalla","comboSeleccionarTallaAltoTalla"};     
       this.setImputText(form, componentes);
       String metodo="ingresarTalla";
       this.setEstilosTodosComponentes(this.getEstilosTodosComponentes(metodo), metodo);       
       this.resetComponentes();
   }
   public void clicBotonIngresarTalla() ///boton guardar Talla
   {
       String form="formDialogoIngresarTalla";
       String[] componentes={"textCodTalla","comboSeleccionarTallaAltoTalla"};        
       this.setImputText(form,componentes);//obtiene los datos de la vista web y los carga en los inputtext de esta clase
       
       String metodo="ingresarTalla";
       List<Object>listaComponentes=new ArrayList<Object>();
        
       listaComponentes.add( this.getTextCodTalla());       
       listaComponentes.add( this.getComboSeleccionarTallaAltoTalla());  
       
       List<String>listaComponentesEstilos=this.getEstilosTodosComponentes(metodo);
       this.setEstilosTodosComponentes(listaComponentesEstilos,metodo);
       //System.out.println("List<String>listaComponentesEstilos----- "+listaComponentesEstilos.get(0));
       if(!this.esCamposVacios(listaComponentes,metodo))
       {  
//           this.mostrarMensajeJS("hola este es tallaweb", form, metodo, false);
           this.getTalla().setTalla(new Talla(this.getTextCodTalla().getValue().toString().trim().toUpperCase(),this.comboSeleccionarTallaAltoTalla.getValue().toString()));
            if(this.getTalla().ingresarTalla())
            {
                this.resetComponentes();
                this.mostrarDialogo("formDialogoIngresarTalla", "DialogoIngresarTalla", false);
                this.buscarTalla();
            }               
       }
       else
       {
           this.getTalla().mostrarMensaje("error", "Error: Datos requeridos deben ser llenados", "");
           //this.mostrarConfirmDialogo("Ingresar Horma", "Error: Datos requeridos deben ser llenados");
       }
   }          
   //*********************fin Metodos ingresar Talla************************
   //*********************    Metodos consultar Talla************************
   public void buscarTalla()
   {
        List <List> datos=this.getTalla().consultarTalla();
        this.setTablaDatosTalla(datos.get(0));            
   }
   public void eventoFilaSeleccionadaTablaConsultarTalla() 
   {//metodo carga los datos del ultimo Talla seleccionado en el caso que se deseen actualizar
       Talla ta=(Talla)this.getTallaSeleccionado();      
       this.setTallaEliminar(ta);       
       System.out.println("eventoFilaSeleccionadaTablaConsultarTalla "+ta.getCodTalla());
   }
   //********************* fin Metodos consultar Talla************************
   
   //*************************Metodos eliminar Talla**************************
   public void clicBotonEliminarTalla()
    {
        System.out.println("clicBotonEliminarTalla Talla para Eliminar: "+this.getTallaEliminar().getCodTalla());
        String datosTallaEliminar=this.getTallaEliminar().getCodTalla();
        if(this.talla.eliminarTalla(this.getTallaEliminar().getCodTalla()))
        {
            this.talla.mostrarMensaje("info", "Se ha eliminado Tallas/Alto: "+datosTallaEliminar,"");
            this.buscarTalla();//recarga la tabla de datos de Talla
            System.out.println("Talla Eliminada: "+datosTallaEliminar);
        }
        else
        {
            this.talla.mostrarMensaje("error", "No se pudo eliminar Tallas/Alto: " +datosTallaEliminar,"");
             System.out.println("No se pudo eliminar Talla: "+datosTallaEliminar);
        }
    }
   //*************************fin eliminar Talla**************************

    

    
        
    
        
}
